package com.glink.manage.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.glink.common.exception.GeneralSimpleException;
import com.glink.manage.domain.AttendanceBean;
import com.glink.manage.dto.attendance.AttendanceAddDTO;
import com.glink.manage.dto.attendance.AttendancePageDTO;
import com.glink.manage.dto.attendance.AttendancePageDateDTO;
import com.glink.manage.vo.attendance.AttendancePageDateVO;
import com.glink.manage.vo.attendance.AttendancePageVO;
import com.glink.manage.vo.attendance.AttendanceProjectStatisticsVO;

import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.util.List;

public interface AttendanceService extends IService<AttendanceBean>{

    /**
     * 分页查询-主
     * @param attendancePageDTO 查询条件
     * @return 信息
     */
    IPage<AttendancePageVO> findAttendancePage(AttendancePageDTO attendancePageDTO) throws GeneralSimpleException;

    /**
     * 根据ID 分页查询
     * @param attendancePageDateDTO 主键ID
     * @return 打卡日期和打卡时间
     */
    IPage<AttendancePageDateVO> findAttendancePageDate(AttendancePageDateDTO attendancePageDateDTO) throws GeneralSimpleException ;

    /**
     * 导出出勤管理主页面（项目部/参建单位）
     * @param attendancePageDTO 导出出勤管理主页面（项目部/参建单位）
     * @param haveUnit 是否参建单位条件
     * @return 输出
     */
    ByteArrayOutputStream exportFindAttendancePage(AttendancePageDTO attendancePageDTO, String haveUnit) throws GeneralSimpleException, IOException;

    /**
     * 导出出勤管理主页面详情
     * @param attendancePageDateDTO 条件
     * @return 输出
     */
    ByteArrayOutputStream exportFindAttendancePageDate(AttendancePageDateDTO attendancePageDateDTO) throws GeneralSimpleException , IOException;

    /**
     * 第三方设备出勤信息添加
     * @param attendanceAddDTO 添加信息条件
     * @return 状态
     */
    boolean addAttendance(AttendanceAddDTO attendanceAddDTO) throws GeneralSimpleException;


    /**
     * 根据日期和工程统计
     * @param workIdList 工程ID
     * @return 工程统计
     */
    List<AttendanceProjectStatisticsVO> projectStatisticsByDateAndWorkIdIn(List<String> workIdList);
}
